function rc4($data, $pwd) {

    $key = [];
    $box = [];
    $cipher = "";
    $pwd_length = $pwd.length;
    $data_length = $data.length;

    for($i = 0; $i < 256; $i++) {
        $key[$i] = ($pwd[$i % $pwd_length]).charCodeAt(0);
        $box[$i] = $i;
    }

    for($j = $i = 0; $i < 256; $i++) {
        $j = ($j + $box[$i] + $key[$i]) % 256;
        $tmp = $box[$i];
        $box[$i] = $box[$j];
        $box[$j] = $tmp;
    }

    for($a = $j = $i = 0; $i < $data_length; $i++) {
        $a = ($a + 1) % 256;
        $j = ($j + $box[$a]) % 256;

        $tmp = $box[$a];
        $box[$a] = $box[$j];
        $box[$j] = $tmp;

        $k = $box[(($box[$a] + $box[$j]) % 256)];
        $cipher += String.fromCharCode(($data[$i]).charCodeAt(0) ^ $k);
    }

    return $cipher;
}